import scipy as sp

#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Data(object):
	'''
	Classe che definisce la struttura dei dati (pattern).
	'''
	
	def __init__(self, D):
		'''
		x e' il vettore che contiene le coordinate
		_clust e' il (vettore? indice del vettore? da decidere TODO!!) che indica il cluster d'appartenenza del punto
		_real_label e' la vera etichetta assegnata al dato in questione
		'''
		self.x = sp.ndarray(D)
		self._clust = None
		self._real_label = None
		
	def __getitem__(self, key):
		'''
		x.__getitem__(key) <==> x[key]
		'''
		return self.x[key]
	
	def __setitem__(self, key, value):
		'''
		x.__setitem__(key, value) <==> x[key] = value
		'''
		self.x[key] = value
	
	def __len__(self):
		'''
		x.__len__() <==> len(x)
		'''
		return len(self.x)
		
	def setRealLabel(self, label):
		'''
		Imposta l'etichetta reale
		'''
		self._real_label = label
		
	def getRealLabel(self):
		'''
		Restituisce l'etichetta reale del punto
		'''
		return self._real_label
		
	def printData(self):
		print self.x
		
	def printDataCl(self):	
		print self.x," --> ",self._clust
	
	def getDimensionality(self):
		'''
		Restituisce il numero di dimensioni in cui sono rappresentati i dati
		'''
		return len(self.x)
		
	def clone(self):
		'''
		Clona l'oggetto
		'''
		d = Data(len(self.x))
		d.x = sp.array(self.x)
		d._clust = self._clust
		d._real_label = self._real_label
		return d
		
	def getData(self):
		return self.x
